#include <iostream>
#include <pthread.h>
#include <cstdio>
#include <unistd.h>

// 线程等待

void showtid(pthread_t &tid)
{
    printf("tid : %ld\n", tid);
}
std::string Formatid(const pthread_t &tid)
{
    char id[64];
    snprintf(id, sizeof id, "0x%lx", tid);
    return id;
}
void *routine(void *args)
{
    std::string name = static_cast<const char *>(args);
    int cnt = 5;
    while (cnt--)
    {
        std::cout << "我是一个新线程, 我的名称 : " << name << ", tid : " << Formatid(pthread_self()) << std::endl;
        sleep(1);
    }
    return (void*)100;
}
int main()
{
    pthread_t tid;
    int n = pthread_create(&tid, nullptr, routine, (void *)"thread-1");
    (void)n;

    // showtid(tid);
    int cnt = 5;
    while (cnt--)
    {
        std::cout << "我是一个main线程" << " , tid : " << Formatid(pthread_self()) << std::endl;
        sleep(1);
    }
    void* ret = nullptr;
    pthread_join(tid, &ret);
    std::cout << "新线程退出码 : " << (long long int)ret << std::endl;

    return 0;
}

// #define ERR_EXIT(m)         \
//     do                      \
//     {                       \
//         perror(m);          \
//         exit(EXIT_FAILURE); \
//     } while (0)

// #include <thread>

// void hello()
// {
//     while (true)
//     {
//         std::cout << "新线程 : " << "pid : " << getpid() << std::endl;
//         sleep(1);
//     }
// }
// int main()
// {
//     std::thread t(hello);
//     while (true)
//     {
//         std::cout << "这是主线程 : " << ", pid : " << getpid() << std::endl;
//         sleep(1);
//     }
//     return 0;
// }

// void* threadrun(void* args)
// {
//     const char* name = (const char*)args;
//     while(true)
//     {
//         sleep(1);
//         std::cout << "这是新线程 ,"<< "name : " << name << std::endl;
//         int a = 10;
//         a /= 0;
//     }
//     return nullptr;
// }
// int main()
// {
//     pthread_t tid = 0;
//     // 创建新线程
//     int n = pthread_create(&tid, nullptr, threadrun, (void*)"thread-1");
//     if(n != 0)
//     {
//         ERR_EXIT("pthread_create");
//     }
//     while(true)
//     {
//         std::cout << "这是主线程 : " << ", pid : "<< getpid() << std::endl;
//         sleep(1);
//     }
//     return 0;
// }